/**
 *  todolist - 案例
 * @type {module.Application|*}
 */
const Koa = require('koa');
const Router = require('koa-router');
const Render = require('koa-swig');
const co = require('co');
const bodyParser = require('koa-bodyparser');
const StaticCache = require('koa-static-cache');


const app = new Koa();
const router = new Router();


let datas = [
    {id:1,title:'<i>事情1</i>',done:true},
    {id:2,title:'事情2',done:false},
    {id:3,title:'事情3',done:false}
]

/**
 *  处理静态资源
 */
app.use(
    StaticCache(__dirname + '/static',{
        prefix: '/static',  // 需要加的前缀
        gzip: true  // 是否开启gzip压缩
    })
)


/**
 * 处理请求正文数据
 */
app.use(bodyParser())

/**
 * 设置模板引擎
 */
let opts = {
    root: __dirname + '/views',  // 模板目录
    autoescape: true,   // 是否自动escape编码,一般为了安全设置成true ， 如果设置成false 会被解析成html标签
    cache: false, // disable, set to false   //是否启用缓存
    // cache:'memory', // 一般线上模式，模板会被缓存在内存中，解析速度更块
    ext: 'html',  // 模板后缀
}
app.context.render = co.wrap(Render(opts));


/**
 *  首页
 */
router.get('/', async (ctx, next) => {
    ctx.body = await ctx.render('index.html', {
        title:'todoList -- ',
        datas:datas
    })
});

/**
 *  添加任务
 */
router.get('/add', async (ctx, next) => {
    ctx.body = await ctx.render('add.html', {
        title:'todoList -- ',
        datas:datas
    })
});

/**
 * 处理添加任务的数据
 */
router.post('/addForm', async (ctx, next) => {
    // get 请求从query参数取值
    // ctx.body = 'canshu:'+ ctx.query.title;
    console.log('从url获取的参数'+ ctx.query.title)

    // post 请求从body参数取值 【request.body获取参数 需要引入bodyParser模块】
    let title = ctx.request.body.title;

    // 如果没有值
    if(!title){
        ctx.body = await ctx.render('message',{
            msg: '请输入添加的任务标题',
            href: 'javascript:history.back()'
        })
    }else{
        datas.push({
            id: datas.length,
            title:title,
            done:false
        })

        // 添加成功自动跳转
        ctx.redirect('/')
    }
});


/**
 * 修改任务状态
 */
router.get('/change/:id', (ctx, next) => {
    let id = ctx.params.id;
    datas.forEach( data => {
        if(data.id == id){
            data.done = !data.done;
        }
    })

    ctx.redirect('/')
});

/**
 *  删除任务
 */
router.get('/remove/:id', (ctx, next) => {
    let id = ctx.params.id;

    // 写法1
    // datas = datas.filter(data => {
    //     return data.id != id;
    // })

    // 写法2
    datas = datas.filter(data => data.id != id )

    ctx.redirect('/')
});


// 监听错误
router.get('/*', (ctx, next) => {
    // console.log(ctx.response)
    if(ctx.response.status === 404){
        ctx.body = '404, 页面丢失了';
    }
    // ctx.body = ctx.params.id;
});


// 挂在路由
app.use(router.routes());
app.use(router.allowedMethods());

app.listen('3000')